package com.jason.fontmetrics.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

/**
 * @DESC:
 * @Author: Jason
 * @Date: 16/8/29
 * @Time: 下午4:53
 */
public class FontView2 extends View {

    private static final String TEXT = "ap小哥ξτβбпшㄎㄊ";
    private Paint textPaint, linePaint; // 文本的画笔和中心线的画笔
    private int baseX, baseY; // Baseline绘制的XY坐标

    public FontView2(Context context) {
        this(context, null);
    }

    public FontView2(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPaint();


    }

    private void initPaint() {
        // 实例化
        textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        textPaint.setTextSize(70);
        textPaint.setColor(Color.BLACK);

        linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        linePaint.setStyle(Paint.Style.STROKE);
        linePaint.setStrokeWidth(1);
        linePaint.setColor(Color.RED);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 计算Baseline绘制的起点x轴坐标
        baseX = (int) (canvas.getWidth() / 2 - textPaint.measureText(TEXT) / 2);
        //baseY = (int) ((canvas.getHeight() / 2) - ((textPaint.descent() + textPaint.ascent()) / 2));

        // Baseline绘制的起点x坐标为画布宽度的一半（中点x坐标）减去文本宽度的一半（这里我们的画布大小与屏幕大小一样），
        // 这个很好理解，而y坐标为画布高度的一半（中点y坐标）
        // 减去ascent和descent绝对值之差的一半，这一点很多朋友可能不是很好理解，其实很简单，如果直接以画布的中心为Baseline：
        //baseY = canvas.getHeight() / 2;

        /**
         * 也就是说Baseline和屏幕中线重合，而这样子绘制出来的文本必定不在屏幕中心，因为ascent的距离大于descent的距离
         * （大多数情况下我们没有考虑top和bottom），那么我们就需要将Baseline往下移使绘制出来的文本能在中心
         *
         * 那么该下移多少呢？这是一个问题，很多童鞋的第一反应是下移ascent的一半高度，但是你要考虑到已经在中线下方的descent的高度，
         * 所以我们应该先在ascent的高度中减去descent的高度再除以二再让屏幕的中点Y坐标（也就是高度的一半）加上这个偏移值
         */

        baseY = (int) ((canvas.getHeight() / 2) + ((Math.abs(textPaint.ascent() - Math.abs(textPaint.descent())) / 2)));


        //canvas.drawText(TEXT, baseX, baseY, textPaint);

        // 实际上我们大可不必这样计算，我们只需设置Paint的文本对齐方式为CENTER，drawText的时候起点x = canvas.getWidth() / 2即可

        textPaint.setTextAlign(Paint.Align.CENTER);
        canvas.drawText(TEXT, canvas.getWidth() / 2, baseY, textPaint);
        canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, linePaint);


    }
}
